跳到主要内容

字符串类型

char
----

最基本(定长)的字符串类型!

用于保存,长度固定的内容!

速度快,但是保存变长数据,会浪费空间!

varchar
-------

可变长度的字符串!

用于保存长度可变的数据!

保存变长数据时,节省空间,处理起来麻烦些!

char(L),varchar(L)

L,表示每个数据的最大长度!单位是 字符数(不是字节数)

![](0D9DEC17B21B022B5F6759712A2A740A.png)

L 表示最大长度!

L的值不是多大都可以!

有最大值:

1,mysql一条记录最大不能超过65535个字节!(字段的长度加起来,不能超过这个值)

2,长度单位是字符数,与编码是相关的!

![](C4580180F61E6B422F313247CD8A36B0.png)

采用单字节编码测试下:

Latin1

![](7DB66EB457550A19D845C5D9C5ABFAF3.png)

测试发现只有一个字段,而且是单字节字符集,还是不能是65535,原因是?

![](908094440705088FF39064E8128C02BA.png)

为什么是 65532呢,少了三个字节:

3,由于varchar是变长,需要记录下真实的数据到底有多长!每个varchar类型的数据,还需要额外的1个或2个字节保存真实数据的长度!(取决于真实数据的长度)

4,整条记录,还需要一个字节来保存那些字段为null

![](3C2D8423FD45CA711D449878B7595024.png)

但是,在使用时,varchar 超过255就选择 text来保存!

text
----

文本,不限长度的字符串!

该字段,不需要指定长度,而且也不会算入到记录的总长度内!

![](40B86C5768D5B71B8CFEBC1E4B9EDB85.png)

选择

定长,char

变长较短(255)个字符之内,varchar

变长,较长,text

枚举,enum,单选
----------

需要在定义枚举类型时,列出哪些是可能的!

![](E9FDC22650C1176B17E052B38DECD07F.png)

在处理时,类似 字符串型进行操作!

意义在于:

1, 限定值的可能性!

![](581C776889624E69649E1627820A2CD3.png)

2, 速度快,比普通的字符串速度快!

原因是 枚举型 是利用 整数进行管理的,能够2个字节进行管理!

![](065595292EA3B1B6A200ABC8D53F41D1.png)

每个值,都是一个整数标识,从第一个选项开始为1, 逐一递增!

管理时整数的形式,速度比字符串快!

![](4EEA88CBAE34F327542A60B3DA90CECC.png)

2 个字节,0-65535,因此可以有 65535个选项可以使用!

集合,set,复选
---------

类似于 enum枚举,在定义时,也需要指定其已有值!

![](297E15134C01B7315FF2FF0C02FB68A2.png)

与字符串相比,优势是:

1, 也是采用 整数进行管理的!采用位运算,从第一位开始为1,逐一x2!

![](A700F20A5D4541FA850AD0980D768D04.png)

2, 每个集合类型8个字节,64位,因此可以表示64个元素!

注意:站在 mysql的角度,尽量多用 枚举和集合!

但是站在php操作mysql的角度,尽量少用!(兼容性差)